package com.yixin;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateRangeParser {

    /**
     * 解析类似 "24年1月-12月" 或 "2024年1月-2024年12月" 的字符串，返回起止日期
     *
     * @param input 输入字符串
     * @return DateRange 包含 start 和 end 日期
     * @throws IllegalArgumentException 如果格式不匹配
     */
    public static List parseMonthRange(String input) {
        if (input == null || input.trim().isEmpty()) {
            throw new IllegalArgumentException("输入不能为空");
        }
        input = input.trim();

        // 正则匹配两种格式
        Pattern pattern1 = Pattern.compile("(\\d{2,4})年(\\d{1,2})月-(\\d{1,2})月"); // 24年1月-12月
        Pattern pattern2 = Pattern.compile("(\\d{2,4})年(\\d{1,2})月-(\\d{2,4})年(\\d{1,2})月"); // 2024年1月-2024年12月

        Matcher matcher1 = pattern1.matcher(input);
        Matcher matcher2 = pattern2.matcher(input);

        int startYear, startMonth, endYear, endMonth;

        if (matcher1.matches()) {
            // 格式1: 24年1月-12月
            startYear = parseYear(matcher1.group(1));
            startMonth = Integer.parseInt(matcher1.group(2));
            endMonth = Integer.parseInt(matcher1.group(3));
            endYear = startYear; // 结束年份与开始年份相同
        } else if (matcher2.matches()) {
            // 格式2: 2024年1月-2024年12月
            startYear = parseYear(matcher2.group(1));
            startMonth = Integer.parseInt(matcher2.group(2));
            endYear = parseYear(matcher2.group(3));
            endMonth = Integer.parseInt(matcher2.group(4));
        } else {
//            throw new IllegalArgumentException("不支持的格式: " + input);
            return new ArrayList<>();
        }

        // 验证月份范围
        if (startMonth < 1 || startMonth > 12 || endMonth < 1 || endMonth > 12) {
//            throw new IllegalArgumentException("月份必须在 1-12 之间");
            return new ArrayList<>();
        }

        // 构建起止日期
        LocalDate startDate = LocalDate.of(startYear, startMonth, 1);
        LocalDate endDate = LocalDate.of(endYear, endMonth, 1).withDayOfMonth(
            LocalDate.of(endYear, endMonth, 1).lengthOfMonth()
        );

        List list = new ArrayList<>();
        list.add(startDate);
        list.add(endDate);

        return list;
    }

    // 处理两位或四位年份
    private static int parseYear(String yearStr) {
        int year = Integer.parseInt(yearStr);
        if (yearStr.length() == 2) {
            // 假设 00-29 为 2000-2029，30-99 为 1930-1999（常见策略）
            return (year < 30) ? 2000 + year : 1900 + year;
        }
        return year;
    }
}